 ~\newline
Qt Creator ~\newline
Default build directory\+: ~\newline
/xxx/xxx/xxx/xxx/c0-\/buildstation 这是个你电脑上的绝对路径，根据自己把编译根放在哪里设置 ~\newline
/\%\{Current\+Project\+:Name\}/\%\{Current\+Kit\+:File\+System\+Name\}/\%\{Qt\+:Version\}/\%\{Current\+Build\+:Name\} 这里是个通配，直接拷贝上去 这是建议值，在\+Multi-\/link2.1里面，这个值不再强制。

 ~\newline
 ~\newline
 ~\newline
 ~\newline
Q\+Q\+T\+\_\+\+B\+U\+I\+L\+D\+\_\+\+R\+O\+OT = /\+Users/abel/\+Develop/c0-\/buildstation ~\newline
Q\+Q\+T\+\_\+\+S\+D\+K\+\_\+\+R\+O\+OT = /\+Users/abel/\+Develop/d1-\/product ~\newline
A\+P\+P\+\_\+\+D\+E\+P\+L\+O\+Y\+\_\+\+R\+O\+OT = /\+Users/abel/\+Develop/d1-\/product ~\newline
  ~\newline
如果设置成功，qmake应当显示如上例程的样子 ~\newline
 \section*{v2.\+1.\+6更新链接\+Q\+Qt的方法}

 ~\newline
 ~\newline
 \section*{主要使用思路}


\begin{DoxyEnumerate}
\item 按照文章所说，更改\+Qt Creator的默认编译路径。只有这样，才能实现多平台目标、中间目标不冲突。 ~\newline
2. 参照\+Lib\+Q\+Qt/src/qqt\+\_\+qkit.pri里的\+S\+Y\+S\+N\+A\+M\+E变量，在\+Qt Creator首选项-\/设置构建和运行-\/构建套件\+Kit页面的每个kit的\+File System Name。（请使用\+Qt Creator 3.\+5以上版本，其被佩戴于\+Qt5.2.） ~\newline
3. 打开\+Lib\+Q\+Qt工程，根据qmake输出，在用户配置目录/\mbox{[}.\mbox{]}qmake/app\+\_\+configure.\+pri里面设置\+Q\+Q\+T\+\_\+\+B\+U\+I\+L\+D\+\_\+\+R\+O\+OT Q\+Q\+T\+\_\+\+S\+D\+K\+\_\+\+R\+O\+OT A\+P\+P\+\_\+\+D\+E\+P\+L\+O\+Y\+\_\+\+R\+O\+O\+T三个路径变量 ~\newline
4. 仿照\+Lib\+Q\+Qt的例程，在用户工程.\+pro里include(.../\+Lib\+Q\+Qt/multi-\/link/multi-\/link/add\+\_\+base\+\_\+manager.pri)
\begin{DoxyItemize}
\item 如果需要跟随发布配置文件，按照图里的设置\+A\+P\+P\+\_\+\+C\+O\+N\+F\+I\+G\+\_\+\+P\+WD ~\newline
5. 在\+Qt Creator项目-\/kit-\/构建设置页面，配置\+Q\+K\+I\+T环境变量（\+Lib\+Q\+Qt也需要，用户\+App需要），可以build了。 ~\newline
 在\+Lib\+Q\+Qt/app/xxx.pri，用户可以选用，拷贝到自己工程目录。 ~\newline
在这个过程里面，只有\+Q\+K\+I\+T环境变量跟随工程build配置，其他的仅仅初始配置一次。 ~\newline
 \section*{Qt Kit、\+Kit File System Name和\+Q\+K\+I\+T、\+S\+Y\+S\+N\+A\+M\+E的关系}
\end{DoxyItemize}
\end{DoxyEnumerate}

Lib\+Q\+Qt有复杂的环境设置，那么这些设置之间的关系是什么样子的呢？ ~\newline
 \paragraph*{先说说，每个value在\+Qt Creator中的位置}


\begin{DoxyItemize}
\item 首选项-\/构建和运行-\/构建套件(Kit)-\/\+Every kit (初始化) ~\newline
 -\/ File system name
\item 项目-\/\+Every kit-\/构建设置-\/构建环境 （跟随build目标） ~\newline
 -\/ Q\+K\+IT ~\newline
-\/ Lib\+Q\+Qt/src/qqt\+\_\+qkit.\+pri（定义之处） ~\newline
 -\/ Q\+K\+I\+T、\+S\+Y\+S\+N\+A\+M\+E的定义。 ~\newline
-\/ 用户配置目录/\mbox{[}.\mbox{]}qmake/app\+\_\+configure.\+pri（初始化） ~\newline
 -\/ Q\+Q\+T\+\_\+\+S\+D\+K\+\_\+\+R\+O\+OT 所有\+S\+D\+K的发布根位置
\begin{DoxyItemize}
\item Q\+Q\+T\+\_\+\+B\+U\+I\+L\+D\+\_\+\+R\+O\+OT 所有\+Lib\+Q\+Qt应用的编译根位置
\item A\+P\+P\+\_\+\+D\+E\+P\+L\+O\+Y\+\_\+\+R\+O\+OT 所有\+Lib\+Q\+Qt应用的发布根目录 ~\newline
 \paragraph*{再说说，他们之间的对应关系}
\end{DoxyItemize}
\end{DoxyItemize}

\tabulinesep=1mm
\begin{longtabu} spread 0pt [c]{*{4}{|X[-1]}|}
\hline
\rowcolor{\tableheadbgcolor}\textbf{ Qt Kit  }&\multicolumn{3}{p{(\linewidth-\tabcolsep*4-\arrayrulewidth*2)*3/4}|}{\cellcolor{\tableheadbgcolor}\textbf{ Kit File System Nam   }}\\\cline{1-4}
\endfirsthead
\hline
\endfoot
\hline
\rowcolor{\tableheadbgcolor}\textbf{ Qt Kit  }&\multicolumn{3}{p{(\linewidth-\tabcolsep*4-\arrayrulewidth*2)*3/4}|}{\cellcolor{\tableheadbgcolor}\textbf{ Kit File System Nam   }}\\\cline{1-4}
\endhead
Windows 32bit  &Windows  &W\+I\+N32  &Windows   \\\cline{1-4}
Windows 64bit  &Win64  &W\+I\+N64  &Win64   \\\cline{1-4}
Linux 32bit  &Linux  &L\+I\+N\+UX  &Linux   \\\cline{1-4}
Linux 64bit  &Linux64  &L\+I\+N\+U\+X64  &Linux64   \\\cline{1-4}
mac\+OS clang 64bit  &Mac\+OS  &mac\+OS  &Mac\+OS   \\\cline{1-4}
Arm 32bit  &Arm32  &A\+R\+M32  &Arm32   \\\cline{1-4}
Mips 32bit  &Mips32  &M\+I\+P\+S32  &Mips32   \\\cline{1-4}
Embedded 32bit  &Embedded  &E\+M\+B\+E\+D\+D\+ED  &Embedded   \\\cline{1-4}
i\+OS clang  &i\+OS  &i\+OS  &i\+OS   \\\cline{1-4}
i\+OS Simulator  &﻿i\+O\+S-\/simulator  &i\+O\+S\+Simulator  &i\+O\+S-\/simulator   \\\cline{1-4}
Android armeabi  &﻿\+Android  &A\+N\+D\+R\+O\+ID  &﻿\+Android   \\\cline{1-4}
Android x86  &﻿\+Android\+\_\+x86  &A\+N\+D\+R\+O\+I\+D\+X86  &﻿\+Android\+\_\+x86   \\\cline{1-4}
\end{longtabu}


\paragraph*{最后说说，他们的决定关系和由来}

Q\+K\+I\+T决定\+S\+Y\+S\+N\+A\+M\+E，\+S\+Y\+S\+N\+A\+M\+E等于\+Kit File System Name. ~\newline
Qt Kit的名字，第一列，就是\+Qt Creator的构建套件。 ~\newline
它每一个包含一个不同的系统名叫做\+File System Name，它还包括不同的编译器、调试器等。 ~\newline
有没有感觉他们的关系很逗？明明相同的东西，写了这么多遍。 ~\newline
原因是这样的， ~\newline
源代码-\/经过qmake变成-\/\+Make\+File-\/经过make变成-\/目标。 ~\newline
Qt Creator自己配置了\+Kit的很多变量，可是！没有全部传给qmake！ ~\newline
qmake拿不到完整的目标信息，只好自己定义一套，就是\+Q\+K\+I\+T和\+S\+Y\+S\+N\+A\+M\+E， ~\newline
而\+Qt Creator这时就必须配合qmake完成配置。 ~\newline
Qt Creator里的两处配置都是为了配合qmake进行配置的， ~\newline
无奈之举。 ~\newline
等\+Qt Creator更新到把目标信息全部传给qmake以后，就可以删除\+Q\+K\+I\+T和\+S\+Y\+S\+N\+A\+M\+E这样的设置了。 ~\newline
 用户设置的那几个路径属于\+Multi-\/link技术，每更换一台电脑才会更换。 ~\newline
目的在于确认用户的开发、工具、编译、产品目录的设置，用于辅助qmake执行多link。 ~\newline
 欢迎建筑工程师、机械工程师、电子工程师、软件工程师、美术工程师等技术人员，学习使用。 ~\newline
 \section*{v2.\+2.\+1更新链接\+Lib\+Q\+Qt的方法}

磁盘上的和先前的没有变化，只不过用户在工程树里看到的app\+\_\+configure.\+pri从app\+\_\+link\+\_\+qqt\+\_\+library.\+pri里移动到了app\+\_\+multi\+\_\+link\+\_\+config.\+pri里。 ~\newline
并且\+Multi-\/link技术主动依赖qqt\+\_\+function.pri里的qmake用户自定义函数集。 ~\newline
图上写的比较简单，\+Windows下在，用户主目录\textbackslash{}App\+Data\textbackslash{}Roaming\textbackslash{}qmake里。  ~\newline
 \section*{v2.\+2.\+2 更新\+Lib\+Q\+Qt Multi-\/link技术}

Windows平台app\+\_\+configure.\+pri的位置 C\+:\textbackslash{}Users\textbackslash{}Administrator\textbackslash{}App\+Data\textbackslash{}qmake， ~\newline
在\+Windows下，\+Qt Creator还是不会在qmake error函数以后依然加载app\+\_\+configure.\+pri， ~\newline
还是需要用户手动去打开这个文件进行编辑。 ~\newline
无奈之举。 ~\newline
  ~\newline
 \section*{v2.\+4支持\+M\+S\+V\+C2015的一些注意事项}

用\+Qt VS Addin或者\+Qt VS Tools开发即可。 ~\newline
 有一些约束：
\begin{DoxyItemize}
\item 源代码必须使用uft-\/8+bom的格式保存，否则\+Visual Studio对文本识别会出现混乱。 ~\newline
-\/ 注意包含一下qqtcore.\+h，里边有一个针对msvc编译器选项，使exe里文本按照utf-\/8编码。 ~\newline
-\/ 终端输出的时候，要用utf-\/8的代码页。 ~\newline
 Visual Studio使用设置： ~\newline
-\/ 设置环境变量 ~\newline
 -\/ 我使用\+Multi-\/environ Manager工具进行设置，语法不一样，但是思路一样。 ~\newline
 -\/ Q\+T\+V\+E\+R\+S\+I\+ON \+: 5.\+8.\+0
\begin{DoxyItemize}
\item Q\+T\+D\+IR \+: \$\{qt5.\+8.\+msvc\}
\item B\+U\+I\+L\+D\+T\+Y\+PE \+: Debug
\item Q\+K\+IT \+: W\+I\+N64
\item Q\+S\+YS \+: Win64
\item Q\+Q\+T\+\_\+\+S\+T\+D\+\_\+\+P\+WD \+: \$\{Q\+T\+V\+E\+R\+S\+I\+ON\}/\$\{Q\+S\+YS\}/\$\{B\+U\+I\+L\+D\+T\+Y\+PE\} ~\newline
 -\/ Q\+Q\+T\+\_\+\+B\+U\+I\+L\+D\+\_\+\+R\+O\+OT \+: C\+:-\/buildstation
\item Q\+Q\+T\+\_\+\+S\+D\+K\+\_\+\+R\+O\+OT \+: C\+:-\/product
\item 路径
\begin{DoxyItemize}
\item \$\{qt5.\+8.\+msvc.\+bin\} ~\newline
 -\/ \$\{Q\+Q\+T\+\_\+\+S\+D\+K\+\_\+\+R\+O\+OT\}/\+Q\+Qt/\$\{Q\+Q\+T\+\_\+\+S\+T\+D\+\_\+\+P\+WD\}/lib 可选
\end{DoxyItemize}
\end{DoxyItemize}
\item 启动\+Visual Studio 2015 ~\newline
 -\/ cd /d "\$\{msvc2015\}"" ~\newline
 -\/ start devenv.\+exe ~\newline
 -\/ 注意：\+Visual Studio 2015的启动环境为上述环境之中。 ~\newline
-\/ Visual Studio 2015设置 ~\newline
 -\/ 打开\+Q\+Qt.\+pro之后，sln工程自动生成 ~\newline
 -\/ 设置调试-\/\+Q\+Qt属性-\/配置属性-\/常规 输出目录由bin\textbackslash{}改为\$\{Q\+Q\+T\+\_\+\+B\+U\+I\+L\+D\+\_\+\+R\+O\+OT\}\$(Q\+Q\+T\+\_\+\+S\+T\+D\+\_\+\+P\+WD)\textbackslash{}
\begin{DoxyItemize}
\item 启动生成，即可，\+Q\+Qt Lib和例程都可以正常生成。这个时候可以去产品输出目录点击运行。如果缺少部分\+Qt\+Lib，手动解决下。 ~\newline
 -\/ App执行调试缺少\+Q\+Qt.\+dll，
\begin{DoxyItemize}
\item 设置调试-\/\+App属性-\/配置属性-\/调试 环境 Path添加\$\{Q\+Q\+T\+\_\+\+S\+D\+K\+\_\+\+R\+O\+OT\}/\+Q\+Qt/\$\{Q\+Q\+T\+\_\+\+S\+T\+D\+\_\+\+P\+WD\}/lib ~\newline
 -\/ 如果想影响全局\+App调试，上边那个可选的路径加进环境变量\+Path里。 ~\newline
 -\/ 这样调试\+App就可以开始了。 ~\newline
-\/ 可以开始使用\+Lib\+Q\+Qt编写自己的\+App了。 ~\newline
 还修改了\+Windows下的app\+\_\+configure.\+pri的磁盘保存位置，到用户主目录/.qmake/app\+\_\+configure.\+pri，这块完全使用类\+Unix风格。 ~\newline
 \section*{Lib\+Q\+Qt v3.\+0}
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}

Multi-\/link技术完成。 ~\newline
在完成的\+Multi-\/link技术里，新的\+Q\+S\+Y\+S环境变量和\+Qt Kit的关系 ~\newline
Q\+K\+I\+T不再使用，而仅仅使用\+Q\+S\+Y\+S。 ~\newline
 \tabulinesep=1mm
\begin{longtabu} spread 0pt [c]{*{4}{|X[-1]}|}
\hline
\rowcolor{\tableheadbgcolor}\textbf{ Qt Kit  }&\multicolumn{3}{p{(\linewidth-\tabcolsep*4-\arrayrulewidth*2)*3/4}|}{\cellcolor{\tableheadbgcolor}\textbf{ Kit File System Nam   }}\\\cline{1-4}
\endfirsthead
\hline
\endfoot
\hline
\rowcolor{\tableheadbgcolor}\textbf{ Qt Kit  }&\multicolumn{3}{p{(\linewidth-\tabcolsep*4-\arrayrulewidth*2)*3/4}|}{\cellcolor{\tableheadbgcolor}\textbf{ Kit File System Nam   }}\\\cline{1-4}
\endhead
Windows 32bit  &Windows  &-\/  &Windows   \\\cline{1-4}
Windows 32bit  &Win32  &-\/  &Win32   \\\cline{1-4}
Windows 64bit  &Win64  &-\/  &Win64   \\\cline{1-4}
Linux 32bit  &Linux  &-\/  &Linux   \\\cline{1-4}
Linux 64bit  &Linux64  &-\/  &Linux64   \\\cline{1-4}
mac\+OS clang 64bit  &mac\+OS  &-\/  &mac\+OS   \\\cline{1-4}
Arm 32bit  &Arm32  &-\/  &Arm32   \\\cline{1-4}
Mips 32bit  &Mips32  &-\/  &Mips32   \\\cline{1-4}
Embedded 32bit  &Embedded  &-\/  &Embedded   \\\cline{1-4}
i\+OS clang  &i\+OS  &-\/  &i\+OS   \\\cline{1-4}
i\+OS Simulator  &﻿i\+O\+S\+Simulator  &-\/  &i\+O\+S\+Simulator   \\\cline{1-4}
Android armeabi  &﻿\+Android  &-\/  &﻿\+Android   \\\cline{1-4}
Android x86  &﻿\+Android\+X86  &-\/  &﻿\+Android\+X86   \\\cline{1-4}
\end{longtabu}


\paragraph*{使用场景截图}

 ~\newline
 \paragraph*{Multi-\/link技术能够达到的管理能力}

App和\+Lib的源代码，一直处于编写之中。 ~\newline
App和\+Lib的目标，一直从\+Build位置，持续发布到\+Deploy位置和\+S\+D\+K位置。 ~\newline
用户再也不必为了管理生成目标、发布目标和链接而劳费手劲。 ~\newline
在2008年的时候还没有这个技术，2018年，这个技术终于变成了现实。 ~\newline
现在，按照\+G\+P\+L发布， ~\newline
基于qmake。 ~\newline
 ~\newline
 \paragraph*{多链接技术创造的生产线}

Multi-\/link会一直处于\+App/\+Lib生产线的控制器地位。 ~\newline
Multi-\/link允许用户自行添加任何依赖项，我把一些常用的依赖项添加用pri放在了app-\/lib里， 而这些依赖项的\+S\+D\+K我保存在了百度网盘，以方便用户取用，用户只需要下载下来解压到自己的\+L\+I\+B\+\_\+\+S\+D\+K\+\_\+\+R\+O\+O\+T里。 ~\newline
百度网盘地址链接：https\+://pan.baidu.\+com/s/1\+F\+P\+Pk\+T\+Unk2\+X\+B\+L4rpn\+Zs\+A\+Gmw 密码：hotz ~\newline
S\+D\+K难免有不全，难免不能满足任何用户的需求，请用户自行补齐。 利用\+Multi-\/link技术的添加\+Library模板很容易的。 我计划在\+Lib\+Q\+Qt 3.\+0的时机将\+Multi-\/link合并到master分支进行正式发布。 ~\newline
 ~\newline


\paragraph*{多链接技术的一点设置}

 ~\newline
A\+P\+P\+\_\+\+D\+E\+P\+L\+O\+Y\+\_\+\+R\+O\+OT=R\+:-\/product ~\newline
L\+I\+B\+\_\+\+S\+D\+K\+\_\+\+R\+O\+OT=R\+:-\/sdk ~\newline
A\+P\+P\+\_\+\+B\+U\+I\+L\+D\+\_\+\+R\+O\+OT=R\+:-\/buildstation ~\newline
Multi-\/link目录里提供了\+Multi-\/link\+Config\+Tool图形配置工具，编译运行就可以设置，非常方便。 ~\newline
在工程里包含multi-\/link/add\+\_\+base\+\_\+manager.pri，在project build config设置环境变量\+Q\+S\+Y\+S，就可以使用里面的丰富函数。简单吧！ ~\newline
$\ast$注意：\+Multi-\/link 2 已经不支持\+Qt4，如果需要\+Qt第四代，那么使用multi-\/link 1.\+0链接\+Q\+Qt。$\ast$ ~\newline
$\ast$注意：\+Multi-\/link 2 A\+P\+P\+\_\+\+B\+U\+I\+L\+D\+\_\+\+R\+O\+O\+T变成了optional，但是依然需要设置一下，以免还有需要的地方。build root是一切开始的地方。$\ast$ ~\newline
 ~\newline
 ~\newline
 Enjoy it! ~\newline


\href{.}{\tt 返回} 